package main

import (
	"encoding/binary"
	"fmt"
	"net"
)

func main() {
	fmt.Println("这是一个TCP客户端测试程序，用于询问服务器自己的IP")
	conn, err := net.Dial("tcp", "127.0.0.1:9999")
	if err != nil {
		fmt.Println("连接服务器失败了，错误:", err.Error())
		return
	}
	fmt.Println("连接服务器成功!")
	var sndBuf = make([]byte, 4)
	binary.BigEndian.PutUint16(sndBuf, 2)
	binary.BigEndian.PutUint16(sndBuf[2:], 1)
	fmt.Println("发送数据(byte []):", sndBuf)
	_, err = conn.Write(sndBuf)
	if err != nil {
		fmt.Println("发送数据失败了:", err.Error())
		return
	}

	var recvBuf = make([]byte, 256)
	nRecv, errRecv := conn.Read(recvBuf)
	if errRecv != nil {
		fmt.Println("接收数据发生错误:", errRecv.Error())
		return
	}

	if nRecv < 3 {
		fmt.Println("错误，一个正确的数据包至少包含4字节的数据。")
		fmt.Println("消息格式为[uint16-长度][uint16-msgId][可选的额外内容]")
		return
	}

	fmt.Println("收到数据(byte []):", recvBuf[0:nRecv])
	i16Len := binary.BigEndian.Uint16(recvBuf)
	i16Code := binary.BigEndian.Uint16(recvBuf[2:])
	fmt.Println("i16len = ", i16Len, ", code = ", i16Code)

	addrStr := string(recvBuf[4:nRecv])
	fmt.Println("我的地址是:", addrStr)
}
